home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1996 #6 / Amiga Plus CD - 1996 - No. 06.iso / pd / programmierung / proasm / routines / alert.r next >
Text File  |  1992-12-15  |  4KB  |  210 lines

  1.  
  2. ;---;  alert.r  ;--------------------------------------------------------------
  3. *
  4. *    ****    GRAVE ERROR ALERT SYSTEM    ****
  5. *
  6. *    Author        Stefan Walter
  7. *    Version        1.01
  8. *    Last Revision    08.09.92
  9. *    Identifier    gea_defined
  10. *       Prefix        gea_    (grave error alert)
  11. *                 ¯     ¯     ¯
  12. *    Functions    Alert, SetAlertChoices, Alert2
  13. *    Macros        AddAlert_
  14. *
  15. *    NOTE:    The EQUR gea_progname must contain the name of the program as
  16. *        String. 
  17. *
  18. ;------------------------------------------------------------------------------
  19.  
  20. ;------------------
  21.     ifnd    gea_defined
  22. gea_defined    =1
  23.  
  24. ;------------------
  25. gea_oldbase    equ __base
  26.     base    gea_base
  27. gea_base:
  28.  
  29. ;------------------
  30.     ifnd    gea_progname
  31.     fail    gea_progname equr 'progname' not done yet!
  32.     endif
  33.  
  34. ;------------------
  35.  
  36. ;------------------------------------------------------------------------------
  37. *
  38. * AddAlert    Macro to add a failure text related to a code number.
  39. *
  40. * USAGE        AddAlert_    [symbol],['error text']
  41. *
  42. ;------------------------------------------------------------------------------
  43.  
  44. ;------------------
  45. AddAlert_    macro    
  46.  
  47. ;------------------
  48. ; Give the symbol a value and put the text.
  49. ;
  50.     ifnd    \1
  51. \1        =    *-gea_base
  52.     dc.b    \2,0
  53.     even
  54.     endif
  55.     endm
  56.  
  57. ;------------------
  58.  
  59. ;------------------------------------------------------------------------------
  60. *
  61. * SetAlertChoices    Set choice texts for Alert.
  62. *
  63. * INPUT:    a0    Left text (max. 20 chars)
  64. *        a1    Right text  "    "   "
  65. *
  66. ;------------------------------------------------------------------------------
  67.  
  68. ;------------------
  69. SetAlertChoices:
  70.  
  71. ;------------------
  72. ; Start.
  73. ;
  74. \start:
  75.     movem.l    a0/a1/a2,-(sp)
  76.     lea    gea_alertltext(pc),a2
  77.     bsr.s    \copy
  78.     exg.l    a0,a1
  79.     lea    gea_alertrtext(pc),a2
  80.     bsr.s    \copy
  81.     movem.l    (sp)+,a0/a1/a2
  82.     rts
  83.  
  84. \copy:    tst.b    (a0)
  85.     beq.s    \done
  86.     move.b    (a0)+,(a2)+
  87.     bra.s    \copy
  88. \done:    rts
  89.  
  90. ;------------------
  91.  
  92. ;------------------------------------------------------------------------------
  93. *
  94. * Alert        Display alert with a text, retry/abort choice.
  95. * Alert2    Display alert with a text, choice last set with SetAlertChoices
  96. *
  97. * INPUT:    d0.w    failure symbol key
  98. *
  99. * OUTPUT:    d0    0 for right, -1 for left button
  100. *        ccr    on d0
  101. *
  102. ;------------------------------------------------------------------------------
  103.  
  104. ;------------------
  105. ; Alert: Copy default choices.
  106. ;    d0=code
  107. ;
  108. Alert:
  109.     movem.l    a0/a1,-(sp)
  110.     lea    gea_defalertl(pc),a0
  111.     lea    gea_defalertr(pc),a1
  112.     bsr    SetAlertChoices
  113.     movem.l    (sp)+,a0/a1
  114.  
  115. ;------------------
  116. ; Startup.
  117. ;    d0=code
  118. ;
  119. Alert2:
  120.     movem.l    d1-a6,-(sp)
  121.     lea    gea_base(pc),a5
  122.     move.l    d0,a4
  123.  
  124. ;------------------
  125. ; Get intuition lib. If we can't get it, exit anyway.
  126. ;
  127. \openintui:
  128.     move.l    4.w,a6
  129.     lea    \intuiname(pc),a1
  130.     jsr    -408(a6)        ;OldOpenLibrary()
  131.     move.l    d0,a6
  132.     tst.l    d0
  133.     beq.s    \end            ;no library, no requester...
  134.  
  135. ;------------------
  136. ; Set in error text.
  137. ;
  138. \setnumber:
  139.     lea    \alertcode(pc),a0
  140.     lea    (a5,a4.w),a4
  141.     moveq    #50,d0
  142. \copy:
  143.     move.b    (a4)+,(a0)+        ;copy name
  144.     beq.s    \copied
  145.     subq.w    #1,d0
  146.     bne.s    \copy
  147.     bra.s    \setalert
  148.  
  149. \copied:
  150.     subq.w    #1,d0
  151.     beq.s    \setalert
  152.     move.b    #" ",(a0)+        ;fill up with space
  153.     bra.s    \copied
  154.  
  155. ;------------------
  156. ; Display alert.
  157. ;
  158. \setalert:
  159.     moveq    #0,d0
  160.     lea    \alerttext(pc),a0
  161.     moveq    #32+16+4+4,d1
  162.     jsr    -90(a6)            ;DisplayAlert()
  163.     move.l    d0,a4
  164.  
  165. ;------------------
  166. ; Close lib.
  167. ;
  168. \closeintui:
  169.     move.l    a6,a1
  170.     move.l    4.w,a6
  171.     jsr    -414(a6)        ;CloseLibrary()
  172.     move.l    a4,d0
  173.  
  174. ;------------------
  175. ; Exit.
  176. ;
  177. \end:
  178.     movem.l    (sp)+,d1-a6
  179.     rts
  180.  
  181. ;------------------
  182.  
  183. ;--------------------------------------------------------------------
  184.  
  185. ;--- Alert --------
  186. \intuiname:    dc.b    "intuition.library",0
  187. \alerttext:    dc.b    0,32,18,gea_progname,":",0,-1
  188.         dc.b    0,32,30,"Fatal error occured: "
  189. \alertcode:    ds.b    50,$20
  190.         dc.b    0,-1
  191.         dc.b    0,32,42,"LEFT button to "
  192.  
  193. gea_alertltext:    dc.b    "retry                RIGHT button to "
  194. gea_alertrtext:    dc.b    "abort                ",0,0
  195.  
  196. gea_defalertl:    dc.b    "retry",0
  197. gea_defalertr:    dc.b    "abort",0
  198.         even
  199.  
  200. ;--------------------------------------------------------------------
  201.  
  202. ;------------------
  203.     base    gea_oldbase
  204.  
  205. ;------------------
  206.     endif
  207.  
  208.  end
  209.  
  210.